import {
    LOAD_MORE_STATUS
} from "../../static/enums/enum_value";
import {
    isEmpty,
    isNotEmpty
} from "../utils/util.js"
const _loadMoreBarContentText = {
    contentdown: LOAD_MORE_STATUS.MORE.name,
    contentrefresh: LOAD_MORE_STATUS.LOADING.name,
    contentnomore: LOAD_MORE_STATUS.NO_MORE.name,
}
const _default_page_no = 1;
const _default_page_size = 30;
var PageQueryMixin = {
    data: function() {
        return {
            pageQuery: {
                pageNo: _default_page_no,
                pageSize: _default_page_size
            }, // 列表请求参数，pageNo，pageSize 不可变，可以添加参数，获取用对象处理会好一点
            pageTotalCount: 0, // 数据总条数 overLoadPageRequestSuccess 方法中去处理
            pageData: [], // 列表数据 overLoadPageRequestSuccess 方法中去处理
            isRefresh: false, // 是否刷新中 外部读取，不做处理
            isLoadmore: false, // 是否加载中 外部读取，不做处理
            showLoadMoreBar: true, // 是否使用上拉加载功能
            loadMoreBarContentText: _loadMoreBarContentText, // loadmorebar 文本，默认LOAD_MORE_STATUS内容，支持修改
        }
    },
    computed: {
        loadMoreStatusValue: function() {
            if (!this.showLoadMoreBar) return LOAD_MORE_STATUS.MORE.value;
            let ableLoadMore = isNotEmpty(this.pageData) && this.pageTotalCount > this.pageData.length;
            if (!ableLoadMore) {
                return LOAD_MORE_STATUS.NO_MORE.value;
            } else if (this.isLoadmore) {
                return LOAD_MORE_STATUS.LOADING.value;
            } else {
                return LOAD_MORE_STATUS.MORE.value;
            }
        },
        showPageEmpty: function() {
            return isEmpty(this.pageData);
        }
    },
    methods: {
        // 刷新请求 在刷新列表的地方调用
        pageRefreshFn() {
            if (this._pageRequestValidatorFn()) {
                this.pageQuery.pageNo = _default_page_no;
                this.pageData = [];
                this.isRefresh = true;
                this._pageRequestFn();
            } else {
                this.overLoadPageRequestStop();
            }
        },
        // 加载请求 在上拉加载的地方调用
        pageLoadMoreFn() {
            let ableLoadMore = this.pageTotalCount > this.pageData.length;
            if (this._pageRequestValidatorFn() && ableLoadMore && this.showLoadMoreBar) {
                this.isLoadmore = true;
                this._pageRequestFn();
            } else {
                this.overLoadPageRequestStop();
            }
        },
        // 数据请求 一般情况下不要重载
        _pageRequestFn() {
            let promise = this.overLoadPageRequest(this.pageQuery.pageNo, this.pageQuery.pageSize);
            promise.then(res => {
                this.pageQuery.pageNo++;
                this.overLoadPageRequestSuccess(res);
            }).finally(res => {
                this.isRefresh = false;
                this.isLoadmore = false;
                this.overLoadPageRequestFinally(res);
            }).catch(error => {
                this.overLoadPageRequestFail(error);
            })
        },
        // 请求前校验 一般情况下不需要重载
        _pageRequestValidatorFn() {
            if (this.isRefresh || this.isLoadmore || !this.overLoadPageRequestValidator()) {
                return false
            }
            return true;
        },
        // 重载函数 请求条件校验
        overLoadPageRequestValidator() {
            return true;
        },
        // 重载函数 因不满足请求条件终止请求处理
        overLoadPageRequestStop() {

        },
        // 重载函数 数据请求 以promise形式返回
        overLoadPageRequest(pageNo, pageSize) {
            return new Promise(resolve => {
                throw new Error("overLoadPageRequest must be overload")
            })
        },
        // 重载函数 数据请求成功处理
        overLoadPageRequestSuccess(res) {
            throw new Error("overLoadPageRequestSuccess must be overload")
        },
        // 重载函数 数据请求失败处理
        overLoadPageRequestFail(error) {

        },
        // 重载函数 数据请求完成处理
        overLoadPageRequestFinally(res) {

        },
    }
}

export default PageQueryMixin;